TTTCをAzure OpenAIで使う
code:extraction.py
llm = ChatOpenAI(model_name=model, temperature=0.0)
元々のコードではfrom langchain.chat_models import ChatOpenAIとimportしている
素直に考えるとfrom langchain.chat_models import AzureChatOpenAIにしたらすんなり動きそうだと思うよね
LangChainは下部レイヤーを抽象化するためにミドルレイヤーとして挟まってるという期待
だけどなんだかうまく動かなかった
原因は特定できていないのでここが問題ではない可能性もある
最終的にfrom langchain_openai import AzureChatOpenAIにしたら動いた
修正箇所としてはこんな感じ
code:py
# llm = ChatOpenAI(model_name=model, temperature=0.0)
llm = AzureChatOpenAI(
model_name=model,
temperature=0.0,
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
openai_api_key=os.getenv("AZURE_OPENAI_API_KEY"),
openai_api_version=os.getenv("AZURE_OPENAI_API_VERSION"))
パラメータが増えたのでdotenvで.envを読んでる
code:py
import dotenv
import os
dotenv.load_dotenv()
.envに書くAZURE_OPENAI_ENDPOINTなどの情報は「リソース」を作成して「モデル」をデプロイすればわかる
https://gyazo.com/65f74e64e4b97696fd5abe034c27e721
https://gyazo.com/0eb102394a58bfdb35d4d1108a4fbe8f
https://gyazo.com/23a267e6425dd5da9279dcc21b62d6c6
AZURE_OPENAI_API_VERSIONが必要かと思って書いたけど、AZURE_OPENAI_ENDPOINTのquery parameterに積まれてるから省略してもいいのかもしれない
あと、これでいいかと思いきやEmbeddingだけモデルが別なのでそちらの作業もする必要がある
from langchain_openai import AzureOpenAIEmbeddings
code:py
embeds = AzureOpenAIEmbeddings(
model="text-embedding-3-large",
openai_api_key=os.getenv("AZURE_OPENAI_API_KEY"),
openai_api_version=os.getenv("AZURE_OPENAI_API_VERSION")
).embed_documents(args)
なんでこっちはAZURE_OPENAI_ENDPOINTがないんだっけ
あAZURE_EMBEDDING_ENDPOINTをダイレクトに環境変数から読んでるのか
.envにAZURE_EMBEDDING_ENDPOINT=https://<resource>.openai.azure.com/openai/deployments/text-embedding-3-large/embeddings?api-version=2023-05-15とか書いてる